package huawei_nowcoder;

import java.util.*;

/**
 * @Description: 字符串加密
 * @Date: 2020/4/23
 * @Author: 许群星
 */
public class _35_StringEncrypt {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            String key=sc.nextLine();
            String string=sc.nextLine();
            System.out.println(encrypt(key,string));
        }
    }
    //将字符串用指定密钥加密
    public static String encrypt(String key,String str){
        //key不重复的放入set中

        Set<Character> set=new LinkedHashSet<>();
        for (int i = 0; i < key.length(); i++) {
            set.add(key.charAt(i));
        }
        int n=set.size();
        int m=26-n;
        List<Character> list=new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            char temp=(char) ('A'+i);
            char temp1=(char) ('a'+i);
            //如果大小写都不存在的话,则加入备用列表
            if (!set.contains(temp)&&!set.contains(temp1))
                list.add(temp1);//加入小写
        }

        //放入map，建立对应关系
        Map<Character,Character> map=new HashMap<>();//用于密钥对应
        Iterator<Character> it=set.iterator();
        //key对应的关系
        for (int i = 0; i < n; i++) {
            char temp=it.next();
            if (Character.isUpperCase(temp))
                map.put((char) ('A'+i),temp);
            else
                map.put((char) ('a'+i),temp);
        }
        //剩余的对应关系
        for (int i = n; i < 26; i++) {
            char temp=Character.toUpperCase(list.get(i-n));
            map.put((char) ('A'+i),temp);
            map.put((char) ('a'+i),list.get(i-n));
        }

        //根据map进行加密
        String ans="";
        for (int i = 0; i < str.length(); i++) {
            ans+=map.get(str.charAt(i));
        }
        return ans;
    }
}
/*
题目描述
有一种技巧可以对数据进行加密，它使用一个单词作为它的密匙。下面是它的工作原理：首先，选择一个单词作为密匙，
如TRAILBLAZERS。如果单词中包含有重复的字母，只保留第1个，其余几个丢弃。现在，修改过的那个单词属于字母表的下面，如下所示：
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时，信息中的每个字母被固定于顶上那行，并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。
因此，使用这个密匙，Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。

请实现下述接口，通过指定的密匙和明文得到密文。
详细描述：
接口说明
原型：
voidencrypt(char * key,char * data,char * encrypt);
输入参数：
char * key：密匙
char * data：明文
输出参数：
char * encrypt：密文
返回值：
void
输入描述:
先输入key和要加密的字符串
输出描述:
返回加密后的字符串
示例1
输入
复制
nihao
ni
输出
复制
le
 */